package com.treeliked.util;

import com.treeliked.pojo.FileModel;

import java.io.File;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import static org.glassfish.grizzly.http.server.util.ExpandJar.deleteDir;

/**
 * 文件工具类
 *
 * @author lqs2
 * @date 2018/11/30, Fri
 */
public class FileUtils {

    /**
     * 当前类加载器
     */
    private static ClassLoader loader;


    static {
        loader = FileUtils.class.getClassLoader();
    }

    /**
     * 遍历文件夹的内容封装到一个map中
     *
     * @param file            需要遍历的文件夹
     * @param modelCollection 我就是一个map
     */
    public static void displayFolderContent(File file, Map<String, FileModel> modelCollection) {
        File[] files = file.listFiles();
        assert files != null;
        for (File file1 : files) {
            FileModel fileModel = new FileModel();
            fileModel.setName(file1.getName());
            modelCollection.put(file1.getName(), fileModel);
            if (file1.isFile()) {
                // 文件
                fileModel.setType(0);
            } else {
                // 是文件夹，递归继续遍历
                fileModel.setType(1);
                Map<String, FileModel> model = new HashMap<>(128);
                fileModel.setContent(model);
                displayFolderContent(file1, model);
            }
        }
    }

    /**
     * 递归删除文件夹及其所有内容
     *
     * @param dir 文件夹
     */
    public static boolean deleteFolder(File dir) {
        if (dir.isDirectory()) {
            String[] children = dir.list();
            // 递归删除目录中的子目录下
            assert children != null;
            for (String aChildren : children) {
                boolean success = deleteDir(new File(dir, aChildren));
                if (!success) {
                    return false;
                }
            }
        }
        // 目录为空，可以删除
        return dir.delete();
    }


    /**
     * 获取resource文件夹下的文件输入流
     *
     * @param path 文件路径，相对于resource目录
     */
    public static InputStream getResourceAsStream(String path) {
        return loader.getResourceAsStream(path);
    }
}
